package com.cobra.rdd.operator.transform

import org.apache.spark.{SparkConf, SparkContext}

//key-value类型 聚合时aggregateByKey的分区间和分区内运算规则相同，那么可以使用foldByKey
object Spark24_RDD_Operator_Transform_foldByKey {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Spark24_RDD_Operator_Transform_foldByKey")
    val sc = new SparkContext(sparkConf)
   val rdd = sc.makeRDD(List(
     ("a",1),("a",2),("a",3),("b",4)
   ),2)
    //aggregateByKey存在函数的柯里化，有两个参数列表
    //第一个参数列表
    //   需要传递一个参数，表示为初始值，主要用于当碰见第一个key的时候，和value进行分区计算
    //第二个参数列表需要传递两个参数
    //      第一个参数表示分区内计算规则
    //      第二个参数表示分区间计算规则
    rdd.foldByKey(0)(
     _+_
    ).collect().foreach(println)
   // rdd.aggregateByKey(0)(_+_,_+_).collect().foreach(println)
    sc.stop()
  }
}
